﻿/*********************************************************************
 * @file   FITKAbstractSeparatePlate.h
 * @brief  分离板件基类
 * @author zhangjingxuan (hiter25@outlook.com)
 * @date   2024-12-18
 *********************************************************************/
#ifndef __FITKABSTRACTSEPARATEPLATE_H__
#define __FITKABSTRACTSEPARATEPLATE_H__
#include "FITK2DMeshToolsAPI.h"
#include <QList>

namespace Core
{
    class FITKNode;
    class FITKPoint;
}

namespace Interface
{
    class FITKAbstractElement;
}

namespace Interface
{
    /**
     * @brief  分离板件基类
     * @author zhangjingxuan (hiter25@outlook.com)
     * @date   2024-12-18
     */
    class FITK2DMeshToolsAPI FITKAbstractSeparatePlate
    {
    public:
        FITKAbstractSeparatePlate(FITKAbstractSeparatePlate&) = delete;
        virtual ~FITKAbstractSeparatePlate() = 0;
        /**
         * @brief    创建分离板件类对象
         * @return   FITKAbstractSeparatePlate *
         * @author   zhangjingxuan (hiter25@outlook.com)
         * @date     2024-12-18
         */
        static FITKAbstractSeparatePlate* createFITKSeparatePlate();
        /**
         * @brief    获取组成每块板的网格单元索引
         * @param[i] meshPoints 点数据
         * @param[i] meshFaces 面数据
         * @return   QList<QList<int>> 组成每一块板的网格单元索引
         * @author   zhangjingxuan (hiter25@outlook.com)
         * @date     2024-12-18
         */
        virtual QList<QList<int>> getPlates(const QList<Core::FITKNode*>& meshPoints, const QList<Interface::FITKAbstractElement*>& meshFaces) = 0;
    protected:
        FITKAbstractSeparatePlate() = default;
    };
}
#endif //! __FITKABSTRACTSEPARATEPLATE_H__